package cn.butcher.service;

import cn.butcher.mapper.AutoChangeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 昨天曾提了一个问题：那个销假只有提前销假和延长假期啊，那我假期刚好结束完了去销假好像点哪个都不对啊
 * <p>
 * 所以发现，我们假期如果到期了，状态应该能自动改变才对
 * <p>
 * 所以我们需要做一个定时任务，每天固定的时间去刷新请假信息状态
 * <p>
 * 如果已经到时间了，就自动修改状态为已完成，否则就什么都不做
 * <p>
 * 有很多实现的思路：1、编写一个线程Thread，定时执行 2、使用java中的TimeTask类
 * <p>
 * 那我们在spring boot中，有定时任务的实现，只需要一个注解就可以实现
 */

@Component // 将我们的bean注册到spring中
public class TimedTaskService {

    @Autowired
    AutoChangeMapper mapper;

    // 每天15：27分执行一次这个方法
    // 现在是26分,我们看看27分会不会执行
    // ok 执行了，说明可行
    // 那我们让程序每天00：00分去刷新我们数据库请假信息的状态不就好了
    @Scheduled(cron = "0 0 0 * * ?") // 使用这个注解就可以实现定时任务了，有表达式
    public void autoChangeStatus() {
        // 我们试试，说明我们的定时任务OK
        mapper.changeStatus();
    }
}
